home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / IDLIncludes / BlockStoragePlugin.idl < prev    next >
Text File  |  1996-05-01  |  36KB  |  1,027 lines

  1. /*
  2.      File:        BlockStoragePlugin.idl
  3.  
  4.      Contains:    Block Storage Plug In Programming Interface
  5.  
  6.      Version:    Technology:    Copland
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __BLOCKSTORAGEPLUGIN_IDL__
  19. #define __BLOCKSTORAGEPLUGIN_IDL__
  20.  
  21. #include <somobj.idl>
  22. #include <somcls.idl>
  23.  
  24. #ifndef __TYPES_IDL__
  25. #include <Types.idl>
  26. #endif
  27. #ifndef __ERRORS_IDL__
  28. #include <Errors.idl>
  29. #endif
  30. #ifndef __FILEMANAGERTYPES_IDL__
  31. #include <FileManagerTypes.idl>
  32. #endif
  33. #ifndef __NAMEREGISTRY_IDL__
  34. #include <NameRegistry.idl>
  35. #endif
  36. #ifndef __BLOCKSTORAGE_IDL__
  37. #include <BlockStorage.idl>
  38. #endif
  39. #ifndef __IOMEMORYLISTS_IDL__
  40. #include <IOMemoryLists.idl>
  41. #endif
  42.  
  43. #ifdef __SOMIDL__
  44.  
  45. #if FOR_SYSTEM8_PREEMPTIVE
  46. /*
  47. ******************************************************************************
  48.  *******************************************************************************
  49.  *******************************************************************************
  50.  
  51.     Plug In Constants
  52.     
  53.  *******************************************************************************
  54.  *******************************************************************************
  55.  *****************************************************************************
  56. */
  57. /*
  58. ******************************************************************************
  59.     
  60.     Options to a BSIOFunc
  61.     
  62.  *****************************************************************************
  63. */
  64. /*
  65. ******************************************************************************
  66.  
  67.     Mapping Plug-In Level of Confidence values
  68.     
  69.  *****************************************************************************
  70. */
  71. typedef UInt32                    BSMPIConfidenceLevel;
  72.  
  73. /*
  74. ******************************************************************************
  75.  
  76.     Mapping Plug-In Level of Confidence values
  77.     
  78.  *****************************************************************************
  79. */
  80. typedef UInt32                    BSCPIConfidenceLevel;
  81.  
  82. /*
  83. ******************************************************************************
  84.  
  85.     Plug In Version - this tracks the revision of the plug-in interface and
  86.         should be placed in the version field of the plug-in interface structure
  87.     
  88.  *****************************************************************************
  89. */
  90. /*
  91. ******************************************************************************
  92.  
  93.     BSIOStatus values
  94.     
  95.  *****************************************************************************
  96. */
  97. typedef UInt32                    BSIOStatus;
  98.  
  99. /*
  100. ******************************************************************************
  101.  *******************************************************************************
  102.  *******************************************************************************
  103.  
  104.     Types
  105.     
  106.  *******************************************************************************
  107.  *******************************************************************************
  108.  *****************************************************************************
  109. */
  110. typedef OpaquePtr                BSStorePtr;                    /* Substituted OpaquePtr for ``void*'' */
  111.  
  112. typedef OpaquePtr                BSContainerPtr;                /* Substituted OpaquePtr for ``void*'' */
  113.  
  114. typedef OpaquePtr                BSIORequestBlockPtr;        /* Substituted OpaquePtr for ``void*'' */
  115.  
  116. typedef OSStatus                BSIOErrors;
  117.  
  118. /*
  119. ******************************************************************************
  120.     BSErrorList:  another structure to manage I/O success/failure.
  121.  
  122.     BSErrorList data structure allows a Mapping Plug-In to keep track of the
  123.     current state of each transfer request sent to it by the Block Storage client.  If transfers complete
  124.     successfully, a pointer 0 is returned.  If an error occurs, a linked list (?) of these data structures
  125.     is returned specifying the exact state of each transfer request.
  126.  
  127.     startingBlock:        The initial transfer block of this fragment of the request
  128.     blockCount:            The number of blocks to be transfered including the startingBlock
  129.     status:                A constant representing the final state of the transfer of the blocks:
  130.                                  kIONotStarted:                No processing was begun on these blocks
  131.                                 kIOStarted:                    The BS Plug-In began to process the blocks
  132.                                 kIOToFamily:                The request was sent to the device family
  133.                                 kIOComplete:                The request completed normally
  134.                                  kIOFailed:                    The request failed to complete execution
  135.     error:                The exact error, if any
  136.     xferID:                An index representing which request of a multiple-request I/O this is
  137.      next:                A pointer to the next data structure (could be eliminated in favor of indices)
  138.  *****************************************************************************
  139. */
  140. typedef SOMLargeStruct            BSErrorList;                /* Derived from a struct of 32 bytes in size */
  141.  
  142. typedef OpaquePtr                BSErrorListPtr;                /* Substituted OpaquePtr for ``BSErrorList*'' */
  143.  
  144. /*
  145. ****************************************************************************
  146.  
  147.     BSStoreMPIComponent describes a component of a Store.  A component may
  148.     be an external device or another Store.  This is the internal form of
  149.     BSStoreComponent.
  150.     
  151.  ***************************************************************************
  152. */
  153. typedef SOMLargeStruct            BSStoreMPIComponent;        /* Derived from a struct of 357 bytes in size */
  154.  
  155. typedef OpaquePtr                BSStoreMPIComponentPtr;        /* Substituted OpaquePtr for ``BSStoreMPIComponent*'' */
  156.  
  157. /*
  158. ******************************************************************************
  159.  
  160.     BSStoreMPIInfo - Information about the Store that the Mapping Plug-in can
  161.         provide
  162.         
  163.  *****************************************************************************
  164. */
  165. typedef SOMLargeStruct            BSStoreMPIInfo;                /* Derived from a struct of 228 bytes in size */
  166.  
  167. typedef OpaquePtr                BSStoreMPIInfoPtr;            /* Substituted OpaquePtr for ``BSStoreMPIInfo*'' */
  168.  
  169. /*
  170. ******************************************************************************
  171.  
  172.     BSStorePPIInfo - Information about the Store that the Partitioning Plug-in 
  173.         can provide
  174.         
  175.  *****************************************************************************
  176. */
  177. typedef SOMLargeStruct            BSStorePPIInfo;                /* Derived from a struct of 8 bytes in size */
  178.  
  179. typedef OpaquePtr                BSStorePPIInfoPtr;            /* Substituted OpaquePtr for ``BSStorePPIInfo*'' */
  180.  
  181. /*
  182. ******************************************************************************
  183.  
  184.     BSContainerPIInfo - Information about the Container that the Container
  185.         Plug-in can provide
  186.         
  187.  *****************************************************************************
  188. */
  189. typedef SOMLargeStruct            BSContainerPIInfo;            /* Derived from a struct of 5 bytes in size */
  190.  
  191. typedef OpaquePtr                BSContainerPIInfoPtr;        /* Substituted OpaquePtr for ``BSContainerPIInfo*'' */
  192.  
  193. /*
  194. ******************************************************************************
  195.  *******************************************************************************
  196.  *******************************************************************************
  197.  
  198.     Plug-In Interface Functions
  199.     
  200.  *******************************************************************************
  201.  *******************************************************************************
  202.  *****************************************************************************
  203. */
  204. /*
  205. ******************************************************************************
  206.  *******************************************************************************
  207.  
  208.     Mapping Plug-In Interface
  209.     
  210.  *******************************************************************************
  211.  *****************************************************************************
  212. */
  213. /*
  214. ******************************************************************************
  215.     BSMappingPIExamine - Plug-in's opportunity to examine a device and determine
  216.             if it is an appropriate plug-in for it
  217.     
  218.     Inputs:        examineStore - a pointer to the in-process Store to be examined
  219.     
  220.     Outputs:    confidence - level of confidence the plug-in has that the plugin
  221.                 is the correct one
  222.     
  223.     Returns:    E_BSSuccess if no errors happened examining the device.  
  224.                 If an error happened, the error received from the other family is
  225.                 returned
  226.  *****************************************************************************
  227. */
  228. typedef OpaquePtr BSMappingPIExamine;
  229. /*
  230. ******************************************************************************
  231.  
  232.     BSMappingPIInit - Plug-in's initialization routine.  Called when plug-in
  233.             is selected for a Store.  Plug-in's opportunity to initialize
  234.             device, allocate data structures, etc.
  235.     
  236.     Inputs:        initStore - a pointer to the Store this plug-in will be attached
  237.                     to
  238.     Outputs:    curState - the current state of the media
  239.     
  240.     Returns:    E_BSSuccess if successful
  241.     
  242.  *****************************************************************************
  243. */
  244. typedef OpaquePtr BSMappingPIInit;
  245. /*
  246. ******************************************************************************
  247.  
  248.     BSMappingPICleanup - Plug-in's dispose routine.  Called when Store is
  249.             being disposed of.  Should dispose of any memory or data structures
  250.             held for this Store, finalize all I/O for Store
  251.     
  252.     Inputs:        cleanupStore - Store that is being disposed of
  253.     
  254.     Outputs:    <none>
  255.     
  256.     Returns:    E_BSSuccess if successful
  257.     
  258.  *****************************************************************************
  259. */
  260. typedef OpaquePtr BSMappingPICleanup;
  261. /*
  262. ******************************************************************************
  263.     BSMappingPIIO - Plug-in's input/output routine
  264.     
  265.     Inputs:        ioStore - the Store on which IO is to be performed
  266.                 blocks - descriptor of the blocks to do IO on
  267.                 memory - descriptor of the memory to do IO on (memory has been prepared)
  268.                 parentRequest - the request this request is being made on behalf of
  269.                 options - read/write
  270.     
  271.     Outputs:    errors - where exactly the errors occured, if any
  272.     
  273.     Returns:    kBSIOContinuing if IO was started successfully and the I/O
  274.                     completion routine still needs to be called
  275.                 kBSIOCompleted if IO was completed and no further action is
  276.                     necessary
  277.                 kBSIOFailed if IO failed for some reason
  278.                 kBSIONotStarted if the IO could not be started
  279.  *****************************************************************************
  280. */
  281. typedef OpaquePtr BSMappingPIIO;
  282. /*
  283. ******************************************************************************
  284.     BSMappingPIFlush - flush plug-in's cached data (if any)
  285.             BSMappingPIFlush flushes the plug-in's cached data.  It is called
  286.             in a similar fashion to an I/O request.  BSStoreRW may be used
  287.             as may BSStoreFlush.
  288.     
  289.     Inputs:        flushStore - the Store on which flush is to be performed
  290.                 parentRequest - the request this request is being made on behalf of
  291.     
  292.     Outputs:    errors - where exactly the errors occured, if any
  293.     
  294.     Returns:    kBSIOContinuing if IO was started successfully and the I/O
  295.                     completion routine still needs to be called
  296.                 kBSIOCompleted if IO was completed and no further action is
  297.                     necessary
  298.                 kBSIOFailed if IO failed for some reason
  299.                 kBSIONotStarted if the IO could not be started
  300.  *****************************************************************************
  301. */
  302. typedef OpaquePtr BSMappingPIFlush;
  303. /*
  304. ******************************************************************************
  305.     BSMappingPIAddComponent - Notifies Plug-in about new components to be added
  306.         to it
  307.     
  308.     Inputs:        destStore - the Store the blocks are to be mapped into
  309.                 newComponent - the new Component to be mapped in
  310.     
  311.     Outputs:    storeNewInfo - the new information about the Store
  312.  
  313.     
  314.     Returns:    E_BSSuccess if successful
  315.                 E_BSMPITooManyMappings if no more mappings can be handled
  316.                 E_BSMPIOutOfStoreBounds if the start of the destination blocks 
  317.                     would cause a gap in the Store
  318.     
  319.  *****************************************************************************
  320. */
  321. typedef OpaquePtr BSMappingPIAddComponent;
  322. /*
  323. ******************************************************************************
  324.     BSMappingPIGoToState - Requests plug-in to take Store to the specified 
  325.             accessibility state.  
  326.     
  327.     Inputs:        theStore - Store to take to the state
  328.                 gotoState - what state to go to (possible states defined above)
  329.                                 
  330.     
  331.     Outputs:    <none>
  332.  
  333.     Returns:    E_BSSuccess if successful
  334.     
  335.  *****************************************************************************
  336. */
  337. typedef OpaquePtr BSMappingPIGoToState;
  338. /*
  339. ******************************************************************************
  340.     BSMappingPIFormatMedia - tells plug-in to do a low-level format of the media
  341.     
  342.     Inputs:        formatStore - Store to format
  343.     
  344.     Outputs:    <none>
  345.     
  346.     Returns:    E_BSSuccessful if successful
  347.     
  348.  *****************************************************************************
  349. */
  350. typedef OpaquePtr BSMappingPIFormatMedia;
  351. /*
  352. ******************************************************************************
  353.     BSMappingPIGetInfo - gets information about the device and the plug-in
  354.     
  355.     Inputs:        formatStore - Store to format
  356.     
  357.     Outputs:    info - the filled in information
  358.     
  359.     Returns:    E_BSSuccessful if successful
  360.     
  361.  *****************************************************************************
  362. */
  363. typedef OpaquePtr BSMappingPIGetInfo;
  364. /*
  365. ******************************************************************************
  366.     BSMappingIOCompletion - I/O completion routine for a mapping plug-in
  367.     
  368.     Inputs:        theStore:  - A pointer to the Store in question
  369.                 finishedPrivateData - A pointer to the private data the Mapping 
  370.                     plug-in associated with this I/O
  371.                 returnedBSErrorList - A pointer to a BSErrorList if the 
  372.                     triggering event came from another BS plug-in
  373.                 returnedStatus - The OSStatus returned by the other family or 
  374.                     plug-in that was called
  375.     Outputs:    errorListPtrPtr - A pointer to a pointer to a BSErrorList.  
  376.                     The BSErrorList is allocated and filled in by the completion 
  377.                     routine if the I/O has failed.  It should be allocated using 
  378.                     BSErrorListAllocate and will be deallocated by the family code.
  379.     
  380.     Returns:    E_BSSuccess if successful
  381.  
  382.  *****************************************************************************
  383. */
  384. typedef OpaquePtr BSMappingIOCompletion;
  385. typedef SOMLargeStruct            BlockStoragePlugInInfo;        /* Derived from a struct of 16 bytes in size */
  386.  
  387. typedef SOMLargeStruct            BSStoreMappingOps;            /* Derived from a struct of 56 bytes in size */
  388.  
  389. typedef OpaquePtr                BSStoreMappingOpsPtr;        /* Substituted OpaquePtr for ``BSStoreMappingOps*'' */
  390.  
  391. /*
  392. ******************************************************************************
  393.  
  394.     BSMPIBackgroundTask - a background task entry point for a Mapping plug-in.
  395.             BSMPIStartBackgroundTask may be used by the Mapping plug-in to
  396.             start one of these.  The task will be automatically terminated
  397.             after the Cleanup routine is executed
  398.     
  399.     Inputs:        theStore - the Store this is running for
  400.                 theArg - the argument passed to BSMPIStartBackgroundTask
  401.                 
  402.     Outputs:    <none>
  403.     
  404.     Returns:    Errors are ignored but will be logged.
  405.  *****************************************************************************
  406. */
  407. typedef OpaquePtr BSMPIBackgroundTask;
  408. /*
  409. ******************************************************************************
  410.  *******************************************************************************
  411.  
  412.     Partitioning Plug-In Interface
  413.     
  414.  *******************************************************************************
  415.  *****************************************************************************
  416. */
  417. /*
  418. ******************************************************************************
  419.     BSPartitioningPIExamine - Plug-in's opportunity to examine a Store and
  420.             determine if it's the right plug-in for it
  421.     
  422.     Inputs:        readStoreConn - a connection to the Store to be examined
  423.     
  424.     Outputs:    certainty - 0 if the plug-in did not recognize the partition
  425.                     map format
  426.                 otherwise the number of bytes read
  427.     
  428.     Returns:    E_BSSuccess if no errors occured
  429.                 E_BSPPIOutOfResources if memory or other resource couldn't
  430.                     be allocated
  431.                 otherwise the Block Storage error from the I/O
  432.     
  433.  *****************************************************************************
  434. */
  435. typedef OpaquePtr BSPartitioningPIExamine;
  436. /*
  437. ******************************************************************************
  438.     BSPartitioningPIInit - Plug-in's initialization routine.  Called when 
  439.             plug-in is selected for a Store.  Plug-in's opportunity to 
  440.             initialize device, allocate data structures, etc.
  441.     
  442.     Inputs:        initStore - pointer to the Store the plug-in is being attached to
  443.                     
  444.     Outputs:    <none>
  445.     
  446.     Returns:    E_BSSuccess if successful
  447.     
  448.  *****************************************************************************
  449. */
  450. typedef OpaquePtr BSPartitioningPIInit;
  451. /*
  452. ******************************************************************************
  453.  
  454.     BSPartitioningPICleanup - Plug-in's dispose routine.  Called when Store is
  455.             being disposed of.  Should dispose of any memory or data structures
  456.             held for this Store and flush the partition map if necessary
  457.     
  458.     Inputs:        cleanupStore - Store that is being disposed of
  459.     
  460.     Outputs:    <none>
  461.     
  462.     Returns:    E_BSSuccess if successful
  463.     
  464.  *****************************************************************************
  465. */
  466. typedef OpaquePtr BSPartitioningPICleanup;
  467. /*
  468. ******************************************************************************
  469.     BSPartitioningPIInitializeMap - lays down a new partition map on a Store (plug-in has
  470.             already been attached)
  471.     
  472.     Inputs:        initStore - the Store to be initialized
  473.     
  474.     Outputs:    <none>
  475.     
  476.     Returns:    E_BSSuccess if successful
  477.                 otherwise, Block Storage error if I/O fails
  478.     
  479.  *****************************************************************************
  480. */
  481. typedef OpaquePtr BSPartitioningPIInitializeMap;
  482. /*
  483. ******************************************************************************
  484.     BSPartitioningPIGetInfo - Gets information about the partition map and the
  485.         partitioning plug-in
  486.     
  487.     Inputs:        store - the Store to read from
  488.     
  489.     Outputs:    info - the filled in information
  490.     
  491.     Returns:    E_BSSuccess if successful
  492.     
  493.  *****************************************************************************
  494. */
  495. typedef OpaquePtr BSPartitioningPIGetInfo;
  496. /*
  497. ******************************************************************************
  498.     BSPartitioningPIGetEntry - Get a particular partition map entry
  499.     
  500.     Inputs:        readStore - the Store
  501.                 entryNum - which entry to read
  502.                 
  503.     Outputs:    retEntry - pointer to a BSPartitionDescriptor that's filled in
  504.                     with the entry
  505.     
  506.     Returns:    E_BSSuccess if successful
  507.                 E_BSPPIPartitionNonExistant if that entry does not exist
  508.                 other Block Storage error if I/O problem
  509.     
  510.  *****************************************************************************
  511. */
  512. typedef OpaquePtr BSPartitioningPIGetEntry;
  513. /*
  514. ******************************************************************************
  515.     BSPartitioningSetEntry - Sets the information in a particular partition map
  516.             entry
  517.     
  518.     Inputs:        
  519.     
  520.     Outputs:    
  521.     
  522.     Returns:    
  523.     
  524.  *****************************************************************************
  525. */
  526. typedef OpaquePtr BSPartitioningPISetEntry;
  527. typedef SOMLargeStruct            BSStorePartitioningOps;        /* Derived from a struct of 44 bytes in size */
  528.  
  529. typedef OpaquePtr                BSStorePartitioningOpsPtr;    /* Substituted OpaquePtr for ``BSStorePartitioningOps*'' */
  530.  
  531. /*
  532. ******************************************************************************
  533.  *******************************************************************************
  534.  
  535.     Container Plug-In Interface
  536.     
  537.  *******************************************************************************
  538.  *****************************************************************************
  539. */
  540. /*
  541. ******************************************************************************
  542.  
  543.     BSContainerPIExamine - Called to allow the Container plug-in to verify
  544.         that it is correct for the Container
  545.  
  546.     Inputs:        initContainer - the Container in question    
  547.  
  548.     Outputs:    levelOfConfidence - how confident the plug-in is that it is the
  549.                     correct one
  550.  
  551.     Returns:    E_BSSuccess if successful
  552.  
  553.  *****************************************************************************
  554. */
  555. typedef OpaquePtr BSContainerPIExamine;
  556. /*
  557. ******************************************************************************
  558.  
  559.     BSContainerPIInit - Plug-in's initialization routine.  Called when 
  560.         plug-in is selected for a Container.  Plug-in's opportunity to 
  561.         initialize device, allocate data structures, etc.
  562.  
  563.     Inputs:        initContainer - a pointer to the Container this plug-in will 
  564.                 be attached to
  565.     Outputs:    info - information about the new Container
  566.                 backgroundTask - if true, the BackgroundTask entry point will
  567.                     be invoked in its own private task.
  568.     
  569.     Returns:    E_BSSuccess if successful
  570.     
  571.  *****************************************************************************
  572. */
  573. typedef OpaquePtr BSContainerPIInit;
  574. /*
  575. ******************************************************************************
  576.  
  577.     BSContainerPICleanup - cleans up plug-in state
  578.  
  579.     Inputs:        container - the Container to clean up for
  580.  
  581.     Outputs:    <none>
  582.  
  583.     Returns:    E_BSSuccess if successful
  584.  
  585.  *****************************************************************************
  586. */
  587. typedef OpaquePtr BSContainerPICleanup;
  588. /*
  589. ******************************************************************************
  590.  
  591.     BSContainerPIGoToState - Tells the Container to go the specified state
  592.  
  593.     Inputs:        container - the Container to take to the state
  594.                 accessState - the state to go to
  595.  
  596.     Outputs:    <none>
  597.  
  598.     Returns:    E_BSSuccess if successful
  599.  
  600.  *****************************************************************************
  601. */
  602. typedef OpaquePtr BSContainerPIGoToState;
  603. /*
  604. ******************************************************************************
  605.  
  606.     BSContainerPIAddContainer - Informs the Container of a new sub-Container
  607.         being added
  608.  
  609.     Inputs:        destContainer - the Container we're adding to
  610.                 addedContainer - the Container being added
  611.  
  612.     Outputs:    <none>
  613.  
  614.     Returns:    E_BSSuccess if successful
  615.  
  616.  *****************************************************************************
  617. */
  618. typedef OpaquePtr BSContainerPIAddContainer;
  619. /*
  620. ******************************************************************************
  621.  
  622.     BSContainerPIGetInfo - Gets information about a Container
  623.  
  624.     Inputs:        infoContainer - the Container to get information about
  625.  
  626.     Outputs:    info - the filled in information buffer
  627.  
  628.     Returns:    E_BSSuccess if successful
  629.  
  630.  *****************************************************************************
  631. */
  632. typedef OpaquePtr BSContainerPIGetInfo;
  633. /*
  634. ******************************************************************************
  635.  
  636.     BSContainerPIBackgroundTask - an optional entry point that will be executed
  637.         within its own task context if the backgroundTask flag is set on exit
  638.         from the Container Plug-in's init routine
  639.     
  640.     Inputs:        container - the Container the Background Task is being invoked 
  641.                         on behalf of
  642.     
  643.     Outputs:    <none>
  644.     
  645.     Returns:    E_BSSuccessful if successful
  646.     
  647.  *****************************************************************************
  648. */
  649. typedef OpaquePtr BSContainerPIBackgroundTask;
  650. typedef SOMLargeStruct            BSContainerPolicyOps;        /* Derived from a struct of 44 bytes in size */
  651.  
  652. typedef OpaquePtr                BSContainerPolicyOpsPtr;    /* Substituted OpaquePtr for ``BSContainerPolicyOps*'' */
  653.  
  654. /*
  655. ******************************************************************************
  656.  
  657.     BSCPIBackgroundTask - a background task entry point for a Container plug-in.
  658.             BSCPIStartBackgroundTask may be used by the Container plug-in to
  659.             start one of these.  The task will be automatically terminated
  660.             after the Cleanup routine is executed
  661.     
  662.     Inputs:        theContainer - the Container this is running for
  663.                 theArg - the argument passed to BSMPIStartBackgroundTask
  664.                 
  665.     Outputs:    <none>
  666.     
  667.     Returns:    Errors are ignored but will be logged.
  668.  *****************************************************************************
  669. */
  670. typedef OpaquePtr BSCPIBackgroundTask;
  671. /*
  672. ******************************************************************************
  673.  *******************************************************************************
  674.  *******************************************************************************
  675.  
  676.     Block Storage Family Services
  677.     
  678.  *******************************************************************************
  679.  *******************************************************************************
  680.  *****************************************************************************
  681. */
  682. /*
  683. ******************************************************************************
  684.     BSStoreRW - Request I/O from another Store.  Used by Mapping Plug-ins.
  685.                 Not for use by Partitioning Plug-ins!!
  686.     
  687.     Inputs:        rwStore - the Store to do I/O with
  688.                 blocks - the blocks for the transfer
  689.                 memory - the memory for the transfer
  690.                 parentRequest - the BSIORequestPtr that the requestor was called
  691.                     with
  692.                 privateData - pointer to be given to the completion routine
  693.                     when it is called
  694.                 options - read/write
  695.                 
  696.     Outputs:    errors - where errors occurred, if any occurred
  697.     
  698.     Returns:    return code from other plug-in
  699.     
  700.  *****************************************************************************
  701. */
  702. /*
  703. ******************************************************************************
  704.     BSStoreFlush - Request another Store to flush its caches.  Used by Mapping Plug-ins.
  705.                 Not for use by Partitioning Plug-ins!!
  706.     
  707.     Inputs:        flushStore - the Store to flush
  708.                 parentRequest - the BSIORequestPtr that the requestor was called
  709.                     with
  710.                 privateData - pointer to be given to the completion routine
  711.                     when it is called
  712.                 
  713.     Outputs:    errors - where errors occurred, if any occurred
  714.     
  715.     Returns:    return code from other plug-in
  716.     
  717.  *****************************************************************************
  718. */
  719. /*
  720. ******************************************************************************
  721.     BSTrackOtherFamilyRequest  - informs the Block Storage family code what routine 
  722.         should be called when the other I/O family the request is being passed to 
  723.         notifies the Block Storage family of its completion.  The Mapping plug-in's
  724.         ioCompletion routine will be called when the notification of the request
  725.         completion is received.
  726.  
  727.     Inputs:        ioStore - Store I/O is taking place in
  728.                 curRequest - BSIORequestBlock for which this I/O is taking place.
  729.                         This was the BSIORequestBlockPtr passed into the R/W 
  730.                         routine.
  731.                 privateData - Private data to be passed back when the completion routine
  732.                         is called.
  733.                 retNotify - Pointer to a kernel notification structure that will
  734.                         be filled in by BSTrackOtherFamilyRequest to be given
  735.                         to the other family in the async API call
  736.     
  737.     Outputs:    <none>
  738.     
  739.     Returns:    E_BSSuccess if able to track request
  740.  
  741.  *****************************************************************************
  742. */
  743. /*
  744. ******************************************************************************
  745.     BSMPIStartBackgroundTask - starts a background task for a Mapping Plug-in.
  746.         The task will be terminated after the Cleanup routines for the Plug-in
  747.         is called for this Store.
  748.     
  749.     Inputs:        store - the Store the background task is being started for
  750.                 backgroundTask - the function to start
  751.                 arg - the argument to be passed to the function
  752.     
  753.     Outputs:    taskID - the task ID of the new task
  754.     
  755.     Returns:    E_BSSuccess if successful
  756.  
  757.  *****************************************************************************
  758. */
  759. /*
  760. ******************************************************************************
  761.     BSCPIStartBackgroundTask - starts a background task for a Container Plug-in.
  762.         The task will be terminated after the Cleanup routines for the Plug-in
  763.         is called for this Container.
  764.     
  765.     Inputs:        container - the Container the background task is being started for
  766.                 backgroundTask - the function to start
  767.                 arg - the argument to be passed to the function
  768.     
  769.     Outputs:    taskID - the task ID of the new task
  770.     
  771.     Returns:    E_BSSuccess if successful
  772.  
  773.  *****************************************************************************
  774. */
  775. /*
  776. ******************************************************************************
  777.  *******************************************************************************
  778.  
  779.     Store Accessor functions
  780.     
  781.  *******************************************************************************
  782.  *****************************************************************************
  783. */
  784. /*
  785. ******************************************************************************
  786.     BSGetMappingPIPrivateData - retrieves the Mapping Plug-in's private data
  787.         from a Store
  788.     
  789.     Inputs:        accessStore - the Store to retrieve the data from
  790.     
  791.     Outputs:    <none>
  792.     
  793.     Returns:    pointer to data
  794.  
  795.  *****************************************************************************
  796. */
  797. /*
  798. ******************************************************************************
  799.     BSSetMappingPIPrivateData - sets the Mapping Plug-in's private data
  800.         for a Store
  801.     
  802.     Inputs:        accessStore - the Store to set the data in
  803.                 privateData - pointer to the data
  804.     
  805.     Outputs:    <none>
  806.     
  807.     Returns:    <none>
  808.  
  809.  *****************************************************************************
  810. */
  811. /*
  812. ******************************************************************************
  813.     BSGetPartitioningPIPrivateData - retrieves the Partitioning Plug-in's private 
  814.         data from a Store
  815.     
  816.     Inputs:        accessStore - the Store to retrieve the data from
  817.     
  818.     Outputs:    <none>
  819.     
  820.     Returns:    pointer to data
  821.  
  822.  *****************************************************************************
  823. */
  824. /*
  825. ******************************************************************************
  826.     BSSetPartitioningPIPrivateData - sets the Partitioning Plug-in's private data
  827.         for a Store
  828.     
  829.     Inputs:        accessStore - the Store to set the data in
  830.                 privateData - pointer to the data
  831.     
  832.     Outputs:    <none>
  833.     
  834.     Returns:    <none>
  835.  
  836.  *****************************************************************************
  837. */
  838. /*
  839. ******************************************************************************
  840.     BSStoreGetNumComponents - Gets the number of component Stores or Devices 
  841.         that have been put together into this Store
  842.     
  843.     Inputs:        accessStore - the Store to get the number of components from
  844.     
  845.     Outputs:    <none>
  846.     
  847.     Returns:    number of components
  848.  
  849.  *****************************************************************************
  850. */
  851. /*
  852. ******************************************************************************
  853.     BSStoreGetComponents - Gets the information about a particular component
  854.         of a Store
  855.     
  856.     Inputs:        accessStore - the Store to get the number of components from
  857.                 componentNum - which component to return
  858.     
  859.     Outputs:    component - the BSStoreComponent buffer that is filled in
  860.     
  861.     Returns:    E_BSSuccess if no problems
  862.  
  863.  *****************************************************************************
  864. */
  865. /*
  866. ******************************************************************************
  867.     BSStoreSetNumPartitions - sets the number of partitions in the Store
  868.     
  869.     Inputs:        accessStore - the Store to get the number of components from
  870.                 numPartitions - the new partition count
  871.     
  872.     Outputs:    <none>
  873.     
  874.     Returns:    <none>
  875.  
  876.  *****************************************************************************
  877. */
  878. /*
  879. ******************************************************************************
  880.     BSStoreGetPPIConnection - Gets the Store connection for the partitioning 
  881.         plug-ins
  882.     
  883.     Inputs:        accessStore - the Store to get connection from
  884.     
  885.     Outputs:    <none>
  886.     
  887.     Returns:    Connection to the Store (kInvalidID if none)
  888.  
  889.  *****************************************************************************
  890. */
  891. /*
  892. ******************************************************************************
  893.     BSStoreGetAccessibilityState - Gets the current accessibility state of the Store
  894.     
  895.     Inputs:        accessStore - the Store to get connection from
  896.     
  897.     Outputs:    <none>
  898.     
  899.     Returns:    Store's state
  900.  
  901.  *****************************************************************************
  902. */
  903. /*
  904. ******************************************************************************
  905.     BSStoreSetAccessibilityState - Sets the current accessibility state of the Store
  906.     
  907.     Inputs:        accessStore - the Store to get connection from
  908.                 setState - the state to set the Store to
  909.     
  910.     Outputs:    <none>
  911.     
  912.     Returns:    <none>
  913.  
  914.  *****************************************************************************
  915. */
  916. /*
  917. ******************************************************************************
  918.     BSStoreGetMPIInfo - Calls the GetInfo routine of the Mapping plug-in 
  919.         attached to the Store
  920.     
  921.     Inputs:        accessStore - the Store to get connection from
  922.                 info - a pointer to the buffer to put the returned info into
  923.     
  924.     Outputs:    <none>
  925.     
  926.     Returns:    <none>
  927.  
  928.  *****************************************************************************
  929. */
  930. /*
  931. ******************************************************************************
  932.     BSStoreGetPPIInfo - Calls the GetInfo routine of the Partitioning plug-in 
  933.         attached to the Store
  934.     
  935.     Inputs:        accessStore - the Store to get connection from
  936.                 info - a pointer to the buffer to put the returned info into
  937.     
  938.     Outputs:    <none>
  939.     
  940.     Returns:    <none>
  941.  
  942.  *****************************************************************************
  943. */
  944. /*
  945. ******************************************************************************
  946.  
  947.     BSMPINotifyFamilyStoreChangedState - called from a Mapping Plug-in (typically
  948.         in the BackgroundTask) to inform the Block Storage Family of an 
  949.         unexpected accessibility change, e.g. the media was removed or the disk
  950.         spun down.
  951.  
  952.     Inputs:        changedStore - the Store that changed
  953.                 newState - the state the Store is now in
  954.                 
  955.     Outputs:    <none>
  956.  
  957.     Returns:    E_BSSuccess if successful
  958.  
  959.  *****************************************************************************
  960. */
  961. /*
  962. ******************************************************************************
  963.  
  964.     BSMPIRequestStoreStateChange - requests a state change of the Store.  This
  965.         should be used, for example, if a device has an eject button that can
  966.         be monitored by the Mapping Plug-in.  If the eject button is pressed
  967.         BSMPIRequestStoreStateChange should be used to notify the Family that
  968.         an eject has been requested and the Family can then notify clients and
  969.         flush data to the media properly.  This call waits until permission is
  970.         granted or denied by the Expert.  The GoToState call of the plug-in
  971.         will be invoked before this calls returns if permission is granted.
  972.  
  973.     Inputs:        changeStore - the Store the state change will affect
  974.                 requestedState - the state the Store is being requested to go to
  975.  
  976.     Outputs:    permission - true if permission was granted and the Store 
  977.                     successfully went to the State requested.
  978.  
  979.     Returns:    E_BSSuccess if successful
  980.  
  981.  *****************************************************************************
  982. */
  983. /*
  984. ******************************************************************************
  985.  
  986.     BSCPINotifyFamilyContainerChangedState - called from a Container Plug-in 
  987.         (typically in the BackgroundTask) to inform the Block Storage Family of 
  988.         an unexpected accessibility change, e.g. the media was removed.
  989.  
  990.     Inputs:        changedStore - the Store that changed
  991.                 newState - the state the Store is now in
  992.                 
  993.     Outputs:    <none>
  994.  
  995.     Returns:    E_BSSuccess if successful
  996.  
  997.  *****************************************************************************
  998. */
  999. /*
  1000. ******************************************************************************
  1001.  
  1002.     BSCPIRequestContainerStateChange - requests a state change of the Container. 
  1003.         This should be used, for example, if a device has an eject button that 
  1004.         can be monitored by the Container Plug-in.  If the eject button is pressed
  1005.         BSCPIRequestStoreStateChange should be used to notify the Family that
  1006.         an eject has been requested and the Family can then notify clients and
  1007.         flush data to the media properly.  This call waits until permission is
  1008.         granted or denied by the Expert.  The GoToState call of the plug-in
  1009.         will be invoked before this calls returns if permission is granted.
  1010.  
  1011.     Inputs:        changeContainer - the Container the state change will affect
  1012.                 requestedState - the state the Container is being requested to go to
  1013.  
  1014.     Outputs:    permission - true if permission was granted and the Container 
  1015.                     successfully went to the State requested.
  1016.  
  1017.     Returns:    E_BSSuccess if successful
  1018.  
  1019.  *****************************************************************************
  1020. */
  1021. #endif
  1022.  
  1023. #endif /* __SOMIDL__ */
  1024.  
  1025. #endif /* __BLOCKSTORAGEPLUGIN_IDL__ */
  1026.  
  1027.